<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>受控组件</title>
  <style>
  </style>
</head>

<body>
  <!-- 准备好一个容器 -->
  <div id="test1"></div>

  <!-- 引入React核心库 -->
  <script type="text/javascript" src="../js/react.development.js"></script>
  <!-- 引入react-dom,用于支持react操作DOM -->
  <script type="text/javascript" src="../js/react-dom.development.js"></script>
  <!-- 引入babel，用于把jsx转为js -->
  <script type="text/javascript" src="../js/babel.min.js"></script>
  <!-- 引入prop-types,用于对prop进行限制 -->
  <script type="text/javascript" src="../js/prop-types.js"></script>

  <script type="text/babel">
    /*
      高阶函数：如果一个函数符合以下2个规范中的任意一个，那就是高阶函数
        1. 若函数A，接受的参数是一个函数
        2. 若函数A，调用的返回值是一个函数
        常见的高阶函数有：Promise、setTimeout、arr.map()等
      
      函数的柯里化：通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码形式
    */

    // 创建组件
    class Login extends React.Component {
      // 随着输入把数据放入到state中，到用时直接用state————受控组件
      state = {
        username: '',
        password: ''
      }

      handleSubmit = (event) => {
        event.preventDefault() // 阻止表单提交
        const { username, password } = this.state
        alert(`你输入的用户名是：${username},密码是：${password}`)
      }
      // 把数据保存到state中
      saveFormData = (dataType) => {
        return (e) => {
          this.setState({ [dataType]: e.target.value })
        }
      }

      render () {
        return (
          <form onSubmit={this.handleSubmit}>
            用户名：<input type="text" name="username" onChange={this.saveFormData('username')} />
            密码：<input type="password" name="password" onChange={this.saveFormData('password')} />
            <button>登录</button>
          </form>
        )
      }
    }
    // 渲染组件
    ReactDOM.render(<Login />, document.getElementById('test1'))
  </script>
</body>

</html>